package com.teemor.common.idempotentspringbootstarter.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标注该接口需要幂等实现
 */

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Idempotent {

    /**
     * 当该字段不为空时，只有beanName在该字段中的bean才会实现幂等
     * 当将该注解加在一个接口上时，如果该接口有多个实现类。那么可以通过该字段配置需要幂等的bean
     *
     * @return
     */
    String[] beanName() default {};

    /**
     * 该自动和上面一样，只不过是通过配置实现类的Class来指定需要幂等的实现类
     * @return
     */
    Class[] beanClass() default {};

    /**
     * 可以配置无需幂等实现的beanName
     * @return
     */
    String[] notProxyName() default {};

    /**
     * 配置无需幂等实现的bean Class
     * @return
     */
    Class[] notProxyClass() default {};

}
